ACTIVATE_CURRENT,
CANCEL,
CYCLE_FOCUS,
+ MOVE_SELECTED,
LAST_SIGNAL
};
static void gtk_menu_shell_reset_key_hash (GtkMenuShell *menu_shell);
static gboolean gtk_menu_shell_activate_mnemonic (GtkMenuShell *menu_shell,
GdkEventKey *event);
+static gboolean gtk_menu_shell_real_move_selected (GtkMenuShell *menu_shell,
+ gint distance);
static guint menu_shell_signals[LAST_SIGNAL] = { 0 };
klass->cancel = gtk_real_menu_shell_cancel;
klass->select_item = gtk_menu_shell_real_select_item;
klass->insert = gtk_menu_shell_real_insert;
+ klass->move_selected = gtk_menu_shell_real_move_selected;
menu_shell_signals[DEACTIVATE] =
g_signal_new (I_("deactivate"),
_gtk_marshal_VOID__ENUM,
G_TYPE_NONE, 1,
GTK_TYPE_DIRECTION_TYPE);
-
+ menu_shell_signals[MOVE_SELECTED] =
+ g_signal_new (I_("move_selected"),
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GtkMenuShellClass, move_selected),
+ _gtk_boolean_handled_accumulator, NULL,
+ _gtk_marshal_BOOLEAN__INT,
+ G_TYPE_BOOLEAN, 1,
+ G_TYPE_INT);
binding_set = gtk_binding_set_by_class (klass);
gtk_binding_entry_add_signal (binding_set,
}
/* Distance should be +/- 1 */
-static void
-gtk_menu_shell_move_selected (GtkMenuShell *menu_shell,
- gint distance)
+static gboolean
+gtk_menu_shell_real_move_selected (GtkMenuShell *menu_shell,
+ gint distance)
{
if (menu_shell->active_menu_item)
{
if (node)
gtk_menu_shell_select_item (menu_shell, node->data);
}
+
+ return TRUE;
+}
+
+/* Distance should be +/- 1 */
+static void
+gtk_menu_shell_move_selected (GtkMenuShell *menu_shell,
+ gint distance)
+{
+ gboolean handled = FALSE;
+
+ g_signal_emit (menu_shell, menu_shell_signals[MOVE_SELECTED], 0,
+ distance, &handled);
}
/**
{
GtkMenuItem *menu_item;
+ if (menu_shell->active_menu_item == NULL)
+ return FALSE;
+
menu_item = GTK_MENU_ITEM (menu_shell->active_menu_item);
if (menu_item->submenu)